package co.edu.uniquindio.ondas.negocio;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import co.edu.uniquindio.ondas.daos.EstudianteDAO;
import co.edu.uniquindio.ondas.daos.EvaluacionProyectosDAO;
import co.edu.uniquindio.ondas.daos.EvaluadorDAO;
import co.edu.uniquindio.ondas.daos.InvestigacionDAO;
import co.edu.uniquindio.ondas.daos.MaestroDAO;
import co.edu.uniquindio.ondas.dtos.ResumenEvaluacionDTO;
import co.edu.uniquindio.ondas.entidades.Bitacora1Maestro;
import co.edu.uniquindio.ondas.entidades.Bitacora2;
import co.edu.uniquindio.ondas.entidades.Bitacora2Maestro;
import co.edu.uniquindio.ondas.entidades.Bitacora3;
import co.edu.uniquindio.ondas.entidades.Bitacora3Maestro;
import co.edu.uniquindio.ondas.entidades.EvaluacionProyectos;
import co.edu.uniquindio.ondas.entidades.Evaluador;
import co.edu.uniquindio.ondas.entidades.Investigacion;

/**
 * Session Bean implementation class EvaluadorEJB
 * Implementacion del EJB Evaluador
 */
@Stateless
public class EvaluadorEJB implements EvaluadorEJBRemote, EvaluadorEJBLocal {
 
	/**
	 * Manejador de la persistencia
	 */
	@PersistenceContext(unitName = "proyectoEJB")
	protected EntityManager entityManager;
	
	/**
	 * DAO del Evaluador
	 */
	private EvaluadorDAO evaluadorDAO;
	/**
	 * DAO de la Evaluacion de Proyectos
	 */
	private EvaluacionProyectosDAO evaluacionProyectosDAO;
	/**
	 * DAO de la Investigacion DAO
	 */
	private InvestigacionDAO investigacionDAO;
	/**
	 * DAO del Estudiante 
	 */
	private EstudianteDAO estudianteDAO;
	/**
	 * DAO del Maestro
	 */
	private MaestroDAO maestroDAO;
	
	//Clave del Evaluador
	//private Evaluador evaluadorClave;
	
   
		
    /**
     * Metodo constructor 
     */
    public EvaluadorEJB() {
        
    }

	public boolean inicioSesionEvaluador(String id, String clave) {
		
		
		evaluadorDAO=new EvaluadorDAO(entityManager);
		boolean autenticado=false;
		
		List<Evaluador>evaluador=evaluadorDAO.getAll();
//		evaluadorClave=evaluadorDAO.findByKey(clave);
		
		for (int i = 0; i < evaluador.size(); i++) {
			if( evaluador.get(i).getIdentificacion().equals(id)&& evaluador.get(i).getClave().equals(clave))
			{
				autenticado=true;
				break;
				
			}
			
		}
				
		return autenticado;
	}

	public boolean modificarEvaluador(Evaluador evaluador) {
		
		evaluadorDAO.update(evaluador);
		return true;
	}

	public List<ResumenEvaluacionDTO> obtenerResumenEvaluacion(
			String idEvaluador) {
		investigacionDAO=new InvestigacionDAO(entityManager);
		return investigacionDAO.obtenerResumenEvaluacion(idEvaluador);
	}
	
	public Bitacora2 getBitacora2(long idInvestigacion) {
		investigacionDAO=new InvestigacionDAO(entityManager);
		List<Bitacora2> listBitacora2=investigacionDAO.getBitacota2Investigacion(idInvestigacion);
		Bitacora2 bitacora2=new Bitacora2();
		
		if (listBitacora2.size()!=0) {
			bitacora2=listBitacora2.get(0);
		}
		return bitacora2;
	}

	public Bitacora3 getBitacora3(long idInvestigacion) {
		investigacionDAO=new InvestigacionDAO(entityManager);
		List<Bitacora3>listbBitacora3=investigacionDAO.getBitacota3Investigacion(idInvestigacion);
		Bitacora3 bitacora3=new Bitacora3();
		
		if (listbBitacora3.size()!=0) {
			bitacora3=listbBitacora3.get(0);
		}
		return bitacora3;
	}

	public Bitacora1Maestro getBitacora1Maestro(long idInvestigacion) {
		investigacionDAO=new InvestigacionDAO(entityManager);
		List<Bitacora1Maestro> listBitacora1Maestro=investigacionDAO.getBitacota1MaestroInvestigacion(idInvestigacion);
		Bitacora1Maestro bitacora1Maestro=new Bitacora1Maestro();
		
		if (listBitacora1Maestro.size()!=0) {
			bitacora1Maestro=listBitacora1Maestro.get(0);
		}
		return bitacora1Maestro;
	}

	public Bitacora2Maestro getBitacora2Maestro(long idInvestigacion) {
		investigacionDAO=new InvestigacionDAO(entityManager);
		List<Bitacora2Maestro> listBitacora2Maestro=investigacionDAO.getBitacota2MaestroInvestigacion(idInvestigacion);
		Bitacora2Maestro bitacora2Maestro=new Bitacora2Maestro();
		
		if (listBitacora2Maestro.size()!=0) {
			bitacora2Maestro=listBitacora2Maestro.get(0);
		}		
		return bitacora2Maestro;
	}

	public Bitacora3Maestro getBitacora3Maestro(long idInvestigacion) {
		investigacionDAO=new InvestigacionDAO(entityManager);
		List<Bitacora3Maestro>listBitacora3Maestro=investigacionDAO.getBitacota3MaestroInvestigacion(idInvestigacion);
		Bitacora3Maestro bitacora3Maestro=new Bitacora3Maestro();
		
		if (listBitacora3Maestro.size()!=0) {
			bitacora3Maestro=listBitacora3Maestro.get(0);
		}
		return bitacora3Maestro;
	}

	public List<Evaluador> obtenerListaEvaluador() {
		evaluadorDAO=new EvaluadorDAO(entityManager);
		return evaluadorDAO.getAll();
	}

	public boolean evaluarInvestigacion(EvaluacionProyectos evaluacion,
			long idInvestigacion, long idEvaluacion, String idEvaluador) {
		
		boolean creada=false;
		
		investigacionDAO=new InvestigacionDAO(entityManager);
		evaluadorDAO=new EvaluadorDAO(entityManager);
		evaluacionProyectosDAO=new EvaluacionProyectosDAO(entityManager);
		
		Investigacion investigacion=investigacionDAO.findByKey(idInvestigacion);
		Evaluador evaluador=evaluadorDAO.findByKey(idEvaluador);
		
		EvaluacionProyectos evaluacionProyectos=evaluacionProyectosDAO.findByKey(idEvaluacion);
		
		if (evaluacionProyectos!=null) {
			investigacion.setCalificado(true);
			investigacionDAO.update(investigacion);
			
			int total=evaluacion.getCumpleCondicion()+evaluacion.getImpacto()+evaluacion.getLaborInvestigativa()+evaluacion.getNumeroPersonas()+evaluacion.getProyeccion()+evaluacion.getTema();
			
			evaluacion.setInvestigacion(investigacion);
			evaluacion.setEvaluador(evaluador);
			evaluacion.setIdentificacion(idEvaluacion);
			evaluacion.setTotal(total);
			evaluacionProyectosDAO.update(evaluacion);
			creada=true;
			
		}
		
		return creada;
	}

	public long obtenerNumeroEstudiantesGrupo(long idGrupo) {
		estudianteDAO=new EstudianteDAO(entityManager);
		return estudianteDAO.obtenerNumeroEstudiantesGrupo(idGrupo);
	}
	
	public long obtenerNumeroMaestrosGrupo(long idGrupo) {
		maestroDAO = new MaestroDAO(entityManager);
		return maestroDAO.obtenerNumeroMaestrosGrupo(idGrupo);
	}

	
    

}
